package edu.scau.mis.pos.service;

import edu.scau.mis.pos.entity.PosItem;
import edu.scau.mis.pos.entity.PosOrderItem;
import edu.scau.mis.pos.vo.ItemVo;
import edu.scau.mis.pos.vo.OrderItemVo;
import edu.scau.mis.pos.vo.OrderVo;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * (OrderItem)表服务接口
 *
 * @author makejava
 * @since 2021-11-06 21:24:53
 */
public interface IPosOrderItemService {

    /**
     * 通过ID查询单条数据
     *
     * @param orderItemId 主键
     * @return 实例对象
     */
    PosOrderItem queryById(Integer orderItemId);

    /**
     * 分页查询
     *
     * @param posOrderItem 筛选条件
     * @return 查询结果
     */
    List<PosOrderItem> queryAll(PosOrderItem posOrderItem);

    /**
     * 新增数据
     *
     * @param posOrderItem 实例对象
     * @return 实例对象
     */
    PosOrderItem insert(PosOrderItem posOrderItem);

    /**
     * 修改数据
     *
     * @param posOrderItem 实例对象
     * @return 实例对象
     */
    PosOrderItem update(PosOrderItem posOrderItem);

    /**
     * 通过主键删除数据
     *
     * @param orderItemId 主键
     * @return 是否成功
     */
    boolean deleteById(Integer orderItemId);

    /**
     * 获取随机生成的订单证号
     *
     * @return
     */
    String getOrderNo();

    /**
     * 点击开始生成订单，开启缓存
     *
     * @param orderNo
     */
    boolean openMapCache(String orderNo);

    /**
     * 判断库存是否充足
     *
     * @param orderItemVo
     * @return
     */
    boolean isInventoryEnough(OrderItemVo orderItemVo);

    /**
     * 添加产品到待付款列表
     *
     * @param orderItemVo
     * @return
     */
    List<ItemVo> enterLineOrderItem(OrderItemVo orderItemVo);

    /**
     * 根据订单证号查询订单信息和产品关键信息
     *
     * @param orderNo 读者证号
     * @return 订单信息
     */
    Map<String,Object> getOrderInformationByOrderNo(String orderNo);

    /**
     * 确认下单
     *
     * @param orderNo 订单证号
     * @return 操作结果
     */
    boolean ConfirmPayItem(String orderNo);

    /**
     * 获取先前的订单信息，用于库存不足无法下单时
     *
     * @return
     */
    OrderVo getPreviousOrderInfo(String orderNo);
}
